unit UDigitacaoInventario;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UFomCadastro, DBClient, Provider, DB, DBTables, Menus, StdCtrls,
  ComCtrls, DBCtrls, Buttons, Grids, DBGrids, ExtCtrls, Mask, ToolEdit,
  RXDBCtrl;

type
  TFDigitacaoInventario = class(TFormCadastro)
    Label66: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    DBEdit6: TDBEdit;
    Label7: TLabel;
    Label8: TLabel;
    DBEdit7: TDBEdit;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label24: TLabel;
    DBLCBProdutoMercadoria: TDBLookupComboBox;
    DBLCBLocalEntrada: TDBLookupComboBox;
    DSLocal: TDataSource;
    DSProduto: TDataSource;
    QSaldoEstoque: TQuery;
    DsSaldoEstoque: TDataSource;
    EdCustoMedio: TEdit;
    EdCustoReposicao: TEdit;
    EdCodProdutoMercadoria: TEdit;
    QProduto: TQuery;
    rgAtivoInativo: TRadioGroup;
    EdLocalizacao: TEdit;
    EdUnidProduto: TEdit;
    DBDPeriodo2: TDBDateEdit;
    cdsCadastroINV_CODIGO: TIntegerField;
    cdsCadastroINV_CODIGOPRODUTO: TIntegerField;
    cdsCadastroINV_DATA_APONTAMENTO: TDateTimeField;
    cdsCadastroINV_ATIVO: TStringField;
    cdsCadastroINV_LOCAL: TIntegerField;
    cdsCadastroINV_VALOR_UNITARIO: TFloatField;
    cdsCadastroINV_UNIDADE: TStringField;
    cdsCadastroINV_LOCALIZACAO: TStringField;
    cdsCadastroUSUARIO_CADASTRO: TStringField;
    cdsCadastroUSUARIO_AUTERACAO: TStringField;
    cdsCadastroUSUARIO_EXCLUSAO: TStringField;
    cdsCadastroDATA_CADASTRO: TDateTimeField;
    cdsCadastroDATA_AUTERACAO: TDateTimeField;
    cdsCadastroDATA_EXCLUSAO: TDateTimeField;
    cdsCadastroEXCLUIDO: TStringField;
    cdsCadastroCODIGOEMPRESA: TIntegerField;
    cdsCadastroINV_PRODUTO_DESC2: TStringField;
    cdsCadastroINV_QUANTIDADE: TIntegerField;
    QCadastroINV_CODIGO: TIntegerField;
    QCadastroINV_CODIGOPRODUTO: TIntegerField;
    QCadastroINV_PRODUTO_DESC: TStringField;
    QCadastroINV_DATA_APONTAMENTO: TDateTimeField;
    QCadastroINV_ATIVO: TStringField;
    QCadastroINV_LOCAL: TIntegerField;
    QCadastroINV_QUANTIDADE: TIntegerField;
    QCadastroINV_VALOR_UNITARIO: TFloatField;
    QCadastroINV_UNIDADE: TStringField;
    QCadastroINV_LOCALIZACAO: TStringField;
    QCadastroUSUARIO_CADASTRO: TStringField;
    QCadastroUSUARIO_AUTERACAO: TStringField;
    QCadastroUSUARIO_EXCLUSAO: TStringField;
    QCadastroDATA_CADASTRO: TDateTimeField;
    QCadastroDATA_AUTERACAO: TDateTimeField;
    QCadastroDATA_EXCLUSAO: TDateTimeField;
    QCadastroEXCLUIDO: TStringField;
    QCadastroCODIGOEMPRESA: TIntegerField;
    procedure EdCodProdutoMercadoriaExit(Sender: TObject);
    procedure DBLCBProdutoMercadoriaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BtnSalvarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnIncluirClick(Sender: TObject);
    procedure DBLCBProdutoMercadoriaExit(Sender: TObject);
    procedure BtnEditarClick(Sender: TObject);
    procedure dsCadastroDataChange(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const Pesquisa_PRoduto = ' SELECT * FROM PRODUTO WHERE (PROD_CODIGO = %s) ';

      Atualiza_Produto = ' UPDATE PRODUTO SET PROD_ATIVO = %s, PROD_LOCALIZACAO = %s'+
                         ' WHERE (PROD_CODIGO = %s)';

      Pesquisa_saldoEstoque = ' SELECT * FROM SALDOESTOQUE WHERE SAL_EST_PRODUTO = %S';

      Pesquisa_local_preferencial = 'SELECT * FROM PARAMETRO WHERE COD_EMPRESA = %s';
var
  FDigitacaoInventario: TFDigitacaoInventario;

implementation

uses UDmGestao, UGeral, UPesquisaRapida;

{$R *.dfm}

procedure TFDigitacaoInventario.EdCodProdutoMercadoriaExit(
  Sender: TObject);
var Filtro : String;
    inv_codigoproduto,
    prod_ativo,
    prod_localizacao,
    prod_unidsaida :string ;
begin
  inherited;

  if trim(EdCodProdutoMercadoria.Text) <> '' then
  begin

    if Usando_Query_Pesquisa(Format(Pesquisa_PRoduto,[EdCodProdutoMercadoria.Text])) then
      begin
    inv_codigoproduto:= Query_Pesquisa.Fields[0].AsVariant;
    prod_ativo := Query_Pesquisa.Fieldbyname('PROD_ATIVO').AsString;
    prod_localizacao := Query_Pesquisa.Fieldbyname('PROD_LOCALIZACAO').AsString;
    prod_unidsaida :=  Query_Pesquisa.Fieldbyname('PROD_UNIDSAIDA').AsString;

    dsCadastro.DataSet.FieldByName('INV_CODIGOPRODUTO').AsString := inv_codigoproduto;

      if (prod_ativo = 'S') then
        rgAtivoInativo.ItemIndex := 0
      else
        rgAtivoInativo.ItemIndex := 1;


      EdLocalizacao.Text :=  prod_localizacao;
      EdUnidProduto.Text :=  prod_unidsaida;

      // CONSULTA SADO ESTOQUE custo medio e custo reposicao
      if(Usando_Query_Pesquisa(Format(Pesquisa_saldoEstoque,[EdCodProdutoMercadoria.Text])))then
       begin

         EdCustoMedio.Text := FloatToStr(Query_Pesquisa.Fieldbyname('SAL_EST_CUSTOMEDIOUNIT').AsFloat);
         EdCustoReposicao.Text := FloatToStr(Query_Pesquisa.Fieldbyname('SAL_EST_CUSTOREPOSICAO').AsFloat);
         dsCadastro.DataSet.FieldByName('INV_VALOR_UNITARIO').AsString := EdCustoMedio.text

      end;


end else
    begin
      Showmessage('Nenhum produto encontrado...');
      EdCodProdutoMercadoria.Clear;
    end;
  end;
end;

procedure TFDigitacaoInventario.DBLCBProdutoMercadoriaKeyDown(
  Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  inherited;

  if Key = VK_F8 then
  begin

    Application.CreateForm(TFPesquisaRapida,FPesquisaRapida);

    FPesquisaRapida.tipo    := 'PRODUTO';
    CaPtUrA_pEsQuIsA_rApIdA := '';

    FPesquisaRapida.ShowModal;

    if CaPtUrA_pEsQuIsA_rApIdA <> '' then
      TDBLookupComboBox(Sender).DataSource.DataSet.FieldByName('INV_CODIGOPRODUTO').AsString :=
      CaPtUrA_pEsQuIsA_rApIdA;

    CaPtUrA_pEsQuIsA_rApIdA := '';

    Exit;

  end else if Key = VK_DELETE then
    TDBLookupComboBox(Sender).KeyValue := Null
  else if Key = VK_F5 then
  begin

    TDBLookupComboBox(Sender).ListSource.DataSet.Close;
    TDBLookupComboBox(Sender).ListSource.DataSet.Open;

  end;
end;

procedure TFDigitacaoInventario.BtnSalvarClick(Sender: TObject);
var
  prodAtivo : string;
  prodLocalizacao : string;
  codProduto : Integer;
begin

  if (DBLCBLocalEntrada.KeyValue = null)then
  begin
   ShowMessage('O Local Precisa Ser Informado...');
   Exit;
   DBLCBLocalEntrada.SetFocus;
  end;

 if (DBDPeriodo2.Date = 0)then
  begin
   ShowMessage('A Data Precisa Ser Informada...');
   Exit;
   DBDPeriodo2.SetFocus;
  end;



  if (DBLCBProdutoMercadoria.KeyValue = null)then
  begin
   ShowMessage('O Produto Precisa Ser Informado...');
   Exit;
   EdCodProdutoMercadoria.SetFocus;
  end;

  dsCadastro.DataSet.FieldByName('INV_PRODUTO_DESC').AsString  := DBLCBProdutoMercadoria.Text;
  if (rgAtivoInativo.ItemIndex = 0) then
    prodAtivo := 'S'
  else
    prodAtivo := 'N';

  prodLocalizacao := EdLocalizacao.Text;
  codProduto := DBLCBProdutoMercadoria.KeyValue;

  executaSQL(Format(Atualiza_Produto,[QuotedStr(prodAtivo),
                                      QuotedStr(prodLocalizacao),
                                      QuotedStr(IntToStr(codProduto))]));

  inherited;
end;

procedure TFDigitacaoInventario.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  FDigitacaoInventario.Release;
  FDigitacaoInventario := nil;
end;

procedure TFDigitacaoInventario.BtnIncluirClick(Sender: TObject);
begin
    inherited;
    EdCustoMedio.Clear;
    EdCustoReposicao.Clear;
    EdCodProdutoMercadoria.Clear;
    EdLocalizacao.Clear;
    EdUnidProduto.Clear;
    rgAtivoInativo.ItemIndex := -1;
    dsCadastro.DataSet.FieldByName('INV_DATA_APONTAMENTO').AsDateTime := now;
    Usando_Query_Pesquisa(Format(Pesquisa_local_preferencial,[IntToStr(Codigoempresa)]));
    dsCadastro.DataSet.FieldByName('INV_LOCAL').AsInteger := Query_Pesquisa.FieldByName('PAR_EST_LOCALESTOQUE').AsInteger;
    EdCodProdutoMercadoria.SetFocus;
end;

procedure TFDigitacaoInventario.DBLCBProdutoMercadoriaExit(
  Sender: TObject);
var Filtro : String;
begin

  inherited;

    if Usando_Query_Pesquisa(Format(Pesquisa_PRoduto,[DBLCBProdutoMercadoria.KeyValue])) then
   //   dsCadastro.DataSet.FieldByName('INV_CODIGOPRODUTO').AsString := Query_Pesquisa.Fields[0].AsVariant;
        EdCodProdutoMercadoria.Text := DBLCBProdutoMercadoria.KeyValue;
      if (Query_Pesquisa.Fieldbyname('PROD_ATIVO').AsVariant = 'S') then
        rgAtivoInativo.ItemIndex := 0
      else
        rgAtivoInativo.ItemIndex := 1;


      EdLocalizacao.Text := Query_Pesquisa.Fieldbyname('PROD_LOCALIZACAO').AsString;
      EdUnidProduto.Text := Query_Pesquisa.Fieldbyname('PROD_UNIDSAIDA').AsString;

      // CONSULTA SADO ESTOQUE custo medio e custo reposicao
      if(Usando_Query_Pesquisa(Format(Pesquisa_saldoEstoque,[DBLCBProdutoMercadoria.KeyValue])))then
       begin

         EdCustoMedio.Text := FloatToStr(Query_Pesquisa.Fieldbyname('SAL_EST_CUSTOMEDIOUNIT').AsFloat);
         EdCustoReposicao.Text := FloatToStr(Query_Pesquisa.Fieldbyname('SAL_EST_CUSTOREPOSICAO').AsFloat);
         dsCadastro.DataSet.FieldByName('INV_VALOR_UNITARIO').AsString := EdCustoMedio.text

      end;


{end else
    begin
      Showmessage('Nenhum produto encontrado...');
      EdCodProdutoMercadoria.Clear;
    end;
  end;
}end;

procedure TFDigitacaoInventario.BtnEditarClick(Sender: TObject);
begin
  inherited;
  DBLCBProdutoMercadoria.SetFocus;
end;

procedure TFDigitacaoInventario.dsCadastroDataChange(Sender: TObject;
  Field: TField);
begin
inherited;
      if not(dscadastro.dataset.fieldbyname('INV_CODIGOPRODUTO').IsNull)then
      begin
        if Usando_Query_Pesquisa(Format(Pesquisa_PRoduto,[dscadastro.dataset.fieldbyname('INV_CODIGOPRODUTO').asstring])) then

          EdCodProdutoMercadoria.Text := dsCadastro.DataSet.fieldbyname('INV_CODIGOPRODUTO').AsString;


          if (Query_Pesquisa.Fieldbyname('PROD_ATIVO').AsVariant = 'S') then
            rgAtivoInativo.ItemIndex := 0
          else
            rgAtivoInativo.ItemIndex := 1;


           EdLocalizacao.Text := Query_Pesquisa.Fieldbyname('PROD_LOCALIZACAO').AsString;
           EdUnidProduto.Text := Query_Pesquisa.Fieldbyname('PROD_UNIDSAIDA').AsString;

            // CONSULTA SADO ESTOQUE custo medio e custo reposicao
           if(Usando_Query_Pesquisa(Format(Pesquisa_saldoEstoque,[dscadastro.dataset.fieldbyname('INV_CODIGOPRODUTO').asstring])))then
            begin

              EdCustoMedio.Text := FloatToStr(Query_Pesquisa.Fieldbyname('SAL_EST_CUSTOMEDIOUNIT').AsFloat);
              EdCustoReposicao.Text := FloatToStr(Query_Pesquisa.Fieldbyname('SAL_EST_CUSTOREPOSICAO').AsFloat);


           end;
      end;
end;

end.
